﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Data.Entity;
using EventPlanner.Models;

namespace EventPlanner.DAL
{
    public class EventPlannerInicializar : DropCreateDatabaseAlways<EventPlannerContext>
    {
        protected override void Seed(EventPlannerContext context)
        {
            base.Seed(context);
            
            /* Cargamos 3 cuentas de usuario */
            List<Cuenta> cuentas = new List<Cuenta>
            {
                new Cuenta { NombreUsuario = "Carson", Contraseña = "123456", ConfirmarContraseña = "123456", Nombre = "Carlos", Apellido = "Sonti", Ciudad = "Santa Rosa", Direccion = "Av. Sarmiento 2377", Email = "carson_jfn@gmail.com", Telefono = "(2954)4567599", Eventos = new List<Evento>(), Contactos = new List<Contacto>() },
                new Cuenta { NombreUsuario = "Mere_a", Contraseña = "123456", ConfirmarContraseña = "123456", Nombre = "Andrea", Apellido = "Merea", Ciudad = "Azul", Direccion = "Tapalque 466", Email = "mere_a@yahoo.com.ar", Telefono = "(2281)4037797", Eventos = new List<Evento>(), Contactos = new List<Contacto>() },
                new Cuenta { NombreUsuario = "Artur_gon", Contraseña = "123456", ConfirmarContraseña = "123456", Nombre = "Arturo Eber", Apellido = "Gonzalez", Ciudad = "Bahia Blanca", Direccion = "Viamonte 845", Email = "artur_gon@hotmail.com", Telefono = "(0291)4559467", Eventos = new List<Evento>(), Contactos = new List<Contacto>() }, 
            };

            MembershipCreateStatus createStatus;
            Membership.CreateUser(cuentas[0].NombreUsuario, cuentas[0].Contraseña, cuentas[0].Email, null, null, true, null, out createStatus);
            FormsAuthentication.SetAuthCookie(cuentas[0].NombreUsuario, false /* createPersistentCookie */);
            FormsAuthentication.SignOut();
            Membership.CreateUser(cuentas[1].NombreUsuario, cuentas[1].Contraseña, cuentas[1].Email, null, null, true, null, out createStatus);
            FormsAuthentication.SetAuthCookie(cuentas[1].NombreUsuario, false /* createPersistentCookie */);
            FormsAuthentication.SignOut();
            Membership.CreateUser(cuentas[2].NombreUsuario, cuentas[2].Contraseña, cuentas[2].Email, null, null, true, null, out createStatus);
            FormsAuthentication.SetAuthCookie(cuentas[2].NombreUsuario, false /* createPersistentCookie */);
            FormsAuthentication.SignOut();

            /* Cargamos 10 eventos */
            List<Evento> eventos = new List<Evento>
            {
                new Evento { EventoID = 1, NombreCreador = "Carson", Nombre = "Encuentro Federal de Folcklore", Descripcion = "Encuentro nacional y federal de instituciones de folcklore", Ciudad = "Intendente Alvear", Direccion = "Av. Entre Rios 1234", FechaHora = DateTime.Parse("2014-3-19"), TipoEntrada = "entrada gratuita", Participantes = new List<Participante>() },
                new Evento { EventoID = 2, NombreCreador = "Carson", Nombre = "Encuentro Nacional de Destrezas Gauchas", Descripcion = "Encuentro nacional de centros criollos", Ciudad = "Jacinto Arauz", Direccion = "Colon y Salta", FechaHora = DateTime.Parse("2014-3-23"), TipoEntrada = "entrada gratuita", Participantes = new List<Participante>()},
                new Evento { EventoID = 3, NombreCreador = "Carson", Nombre = "Maratón Internacional 'A Pampa Traviesa'", Descripcion = "Maraton por la ciudad capital de La Pampa(Santa Rosa) con deportista provenientes de todo el mundo", Ciudad = "Santa Rosa", Direccion = "Parque Municipal de Santa Rosa", FechaHora = DateTime.Parse("2014-4-9"), TipoEntrada = "entrada gratuita" , Participantes = new List<Participante>()},
                new Evento { EventoID = 4, NombreCreador = "Carson", Nombre = "Rally Pampeano y Patagónico de Autos Antiguos", Descripcion = "Encuentro de autos antiguos de la patagonia", Ciudad = "Santa Rosa", Direccion = "Av. Mitre 151", FechaHora = DateTime.Parse("2014-8-15"), TipoEntrada = "entrada gratuita", Participantes = new List<Participante>()},
                new Evento { EventoID = 5, NombreCreador = "Mere_a", Nombre = "Fiesta Nacional de la Miel (Expomiel Azul)", Descripcion = "La Fiesta Nacional de la Miel se desarrollará los dias 8, 9 y 10 de Junio en la ciudad de Azul.", Ciudad = "Azul", Direccion = "Av. Urioste y Av. Pellegrini (Balneario Municipal)", FechaHora = DateTime.Parse("2014-6-8"), TipoEntrada = "entrada gratuita", Participantes = new List<Participante>()},
                new Evento { EventoID = 6, NombreCreador = "Mere_a", Nombre = "Congreso Nacional de Derecho Procesal Garantista", Descripcion = "Se programan charlas, exposiciones, debates, ponencias y conferencias que desarrollan temáticas relacionadas con las ciencias jurídicas. ", Ciudad = "Azul", Direccion = "Olazabal 269", FechaHora = DateTime.Parse("2014-11-30"), TipoEntrada = "entrada gratuita" , Participantes = new List<Participante>()},
                new Evento { EventoID = 7, NombreCreador = "Mere_a", Nombre = "Azul Rock", Descripcion = "Una fiesta de la música que ya también por su continuidad y pervivencia se ha ganado un espacio de reconocimiento y aceptación, a punto tal que cada vez son mas los grupos musicales de Azul y la zona que desean participar.", Ciudad = "Azul", Direccion = "Balneario Municipal", FechaHora = DateTime.Parse("2014-12-8"), TipoEntrada = "entrada gratuita", Participantes = new List<Participante>() },
                new Evento { EventoID = 8, NombreCreador = "Artur_gon", Nombre = "FISA Vive", Descripcion = "El concurso tiene dos categorías: música y danza, que incluyen tanto grupos, solistas y parejas. El primer premio es de 12.000 pesos y el segundo de 6.000.", Ciudad = "Bahia Blanca", Direccion = "Predio FISA", FechaHora = DateTime.Parse("2014-3-15"), TipoEntrada = "entrada con costo", Participantes = new List<Participante>()},
                new Evento { EventoID = 9, NombreCreador = "Artur_gon", Nombre = "6ta Feria de Editoriales Autogestionadas", Descripcion = "Habrá presentaciones de libros, recitales de poesía y música, narraciones orales y, por supuesto, venta de libros de las editoriales participantes.", Ciudad = "Bahia Blanca", Direccion = "Av. Alem 925", FechaHora = DateTime.Parse("2014-11-1"), TipoEntrada = "entrada gratuita" , Participantes = new List<Participante>()},
                new Evento { EventoID = 10, NombreCreador = "Artur_gon", Nombre = "El jorobado de París", Descripcion = "La obra ‘El jorobado de París’, que se estrenó hace dos décadas pero que este año volvió con una versión renovada, llega a Bahía Blanca.", Ciudad = "Bahia Blanca", Direccion = "Teatro Municipal(alem y alsina)", FechaHora = DateTime.Parse("2014-10-26"), TipoEntrada = "entrada VIP", Participantes = new List<Participante>()}
            };

            /* Cargamos los participantes de los diferentes eventos */
            List<Participante> participantes = new List<Participante>
            {
                new Participante { Nombre = "Guillermo", Email = "diller@hotmail.com", Eventos = new List<Evento>() },
                new Participante { Nombre = "Juan", Email = "jiv_leon_830@hotmail.com", Eventos = new List<Evento>() },
                new Participante { Nombre = "Martin", Email = "martincho_jp@yahoo.com", Eventos = new List<Evento>() },
                new Participante { Nombre = "Javier", Email = "javitoelp@hotmail.com", Eventos = new List<Evento>() },
                new Participante { Nombre = "Ricardo", Email = "rickypz@gmail.com", Eventos = new List<Evento>() },
                new Participante { Nombre = "Bernardo", Email = "bernardo_ts@hotmail.com", Eventos = new List<Evento>() },
                new Participante { Nombre = "Mariel", Email = "rjo_tig@hotmail.com", Eventos = new List<Evento>() },
                new Participante { Nombre = "Jose", Email = "juanjo69@hotmail.com", Eventos = new List<Evento>() },
                new Participante { Nombre = "Jorgelina", Email = "rafa-rv@hotmail.com", Eventos = new List<Evento>() },
                new Participante { Nombre = "Veronica", Email = "ramon_rm@hotmail.com", Eventos = new List<Evento>() },
                new Participante { Nombre = "Ariel", Email = "atrellini@gmail.com", Eventos = new List<Evento>() },
                new Participante { Nombre = "Ivan", Email = "rusocarp@hotmail.com", Eventos = new List<Evento>() }
            };
            participantes.ForEach(s => context.Participantes.Add(s));
            context.SaveChanges();

            /* Cargamos los contactos de las diferentes cuentas */
            List<Contacto> contactos = new List<Contacto>
            {
                new Contacto { Nombre = "Guillermo", Email = "diller@hotmail.com", Telefono = "(0291) 4525637", Cuentas = new List<Cuenta>() },
                new Contacto { Nombre = "Juan", Email = "jiv_leon_83@hotmail.com", Telefono = "(02923) 403497", Cuentas = new List<Cuenta>() },
                new Contacto { Nombre = "Ricardo", Email = "rickypz@gmail.com", Telefono = string.Empty, Cuentas = new List<Cuenta>() },
                new Contacto { Nombre = "Mariel", Email = "rjo_tig@hotmail.com", Telefono = string.Empty, Cuentas = new List<Cuenta>() },
                new Contacto { Nombre = "Jorgelina", Email = "rafa-rv@hotmail.com", Telefono = string.Empty, Cuentas = new List<Cuenta>() },
                new Contacto { Nombre = "Veronica", Email = "ramon_rm@hotmail.com", Telefono = string.Empty, Cuentas = new List<Cuenta>() },
                new Contacto { Nombre = "Ivan", Email = "rusocarp@hotmail.com", Telefono = "(0291) 482945", Cuentas = new List<Cuenta>() },
                new Contacto { Nombre = "Ariel", Email = "atrellini@gmail.com", Telefono = "(0291) 4522945", Cuentas = new List<Cuenta>() }
            };
            contactos.ForEach(s => context.Contactos.Add(s));
            context.SaveChanges();
            
            /* Ingresamos los organizadores de los eventos */
            var organizadores = new List<Organizador>
            {
                new Organizador { OrganizadorID = 1, Nombre = "UNICEN", Email = "unicen@coopenet.com.ar", Telefono = "(2281)4589901" },
                new Organizador { OrganizadorID = 2, Nombre = "Municipalidad de Jacinto Arauz", Email = "municipio_ja@gmail.com", Telefono = "(2954)4656244"},
                new Organizador { OrganizadorID = 3, Nombre = "Federación Atlética Pampeana", Email = "contacto_fap@yahoo.com", Telefono = "(2954)4517854" },
                new Organizador { OrganizadorID = 4, Nombre = "Centro Apicultores de Azul", Email = "caa@expomielazul.com", Telefono = "(2281)433983" },
                new Organizador { OrganizadorID = 5, Nombre = "Club de Vehículos Antiguos, Clásicos y Especiales de La Pampa", Email = "cvacelp@gmail.com", Telefono = "(2954)465688"},
                new Organizador { OrganizadorID = 6, Nombre = "Centro Tradicionalista Fortín Pampa", Email = "ctfp@gmail.com", Telefono = "(2954)465532" },
                new Organizador { OrganizadorID = 7, Nombre = "Dirección de Cultura de la Municipalidad de Azul", Email = "municipio_dcma@hotmail.com", Telefono = "(2281)465532" },
                new Organizador { OrganizadorID = 8, Nombre = "Municipalidad de Bahia Blanca", Email = "municipio_bb@yahoo.com", Telefono = "(0291)45513234" }
            };
            organizadores.ForEach(s => context.Organizadores.Add(s));
            context.SaveChanges();


            /* Asignamos a cada evento su organizador */
            eventos[0].OrganizadorID = 2;
            eventos[1].OrganizadorID = 6;
            eventos[2].OrganizadorID = 3;
            eventos[3].OrganizadorID = 5;
            eventos[4].OrganizadorID = 4;
            eventos[5].OrganizadorID = 1;
            eventos[6].OrganizadorID = 7;
            eventos[7].OrganizadorID = 8;
            eventos[8].OrganizadorID = 8;
            eventos[9].OrganizadorID = 8;

            /* Asignamos a cada evento sus participantes */
            eventos[0].Participantes.Add(participantes[0]);
            eventos[0].Participantes.Add(participantes[1]);
            eventos[0].Participantes.Add(participantes[2]);
            eventos[0].Participantes.Add(participantes[7]);
           
            eventos[1].Participantes.Add(participantes[3]);
            eventos[1].Participantes.Add(participantes[5]);
            eventos[1].Participantes.Add(participantes[11]);
            
            eventos[2].Participantes.Add(participantes[10]);
            eventos[2].Participantes.Add(participantes[9]);
            eventos[2].Participantes.Add(participantes[6]);
            
            eventos[3].Participantes.Add(participantes[6]);
            eventos[3].Participantes.Add(participantes[1]);
            eventos[3].Participantes.Add(participantes[4]);
            eventos[3].Participantes.Add(participantes[8]);
            eventos[3].Participantes.Add(participantes[10]);
            eventos[3].Participantes.Add(participantes[7]);
            
            eventos[4].Participantes.Add(participantes[7]);
            eventos[4].Participantes.Add(participantes[6]);
            eventos[4].Participantes.Add(participantes[2]);
            eventos[4].Participantes.Add(participantes[3]);
            
            eventos[5].Participantes.Add(participantes[8]);
            eventos[5].Participantes.Add(participantes[9]);
            eventos[5].Participantes.Add(participantes[3]);
            eventos[5].Participantes.Add(participantes[4]);
            
            eventos[6].Participantes.Add(participantes[10]);
            eventos[6].Participantes.Add(participantes[0]);
            eventos[6].Participantes.Add(participantes[1]);
            
            eventos[7].Participantes.Add(participantes[4]);
            eventos[7].Participantes.Add(participantes[9]);
            
            eventos[8].Participantes.Add(participantes[2]);
            eventos[8].Participantes.Add(participantes[6]);
            eventos[8].Participantes.Add(participantes[7]);
            eventos[8].Participantes.Add(participantes[11]);
            
            eventos[9].Participantes.Add(participantes[1]);
            eventos[9].Participantes.Add(participantes[3]);
            eventos[9].Participantes.Add(participantes[8]);
            eventos[9].Participantes.Add(participantes[10]);
            eventos[9].Participantes.Add(participantes[0]);
            eventos[9].Participantes.Add(participantes[5]);
            eventos.ForEach(s => context.Eventos.Add(s));
            context.SaveChanges();

            /* Asignamos a cada cuenta sus eventos  */
            cuentas[0].Eventos.Add(eventos[0]);
            cuentas[0].Eventos.Add(eventos[1]);
            cuentas[0].Eventos.Add(eventos[2]);
            cuentas[0].Eventos.Add(eventos[3]);
            cuentas[1].Eventos.Add(eventos[4]);
            cuentas[1].Eventos.Add(eventos[5]);
            cuentas[1].Eventos.Add(eventos[6]);
            cuentas[2].Eventos.Add(eventos[7]);
            cuentas[2].Eventos.Add(eventos[8]);
            cuentas[2].Eventos.Add(eventos[9]);

            /* Asignamos a cada cuenta sus contactos */
            cuentas[0].Contactos.Add(contactos[0]);
            cuentas[0].Contactos.Add(contactos[1]); 
            cuentas[0].Contactos.Add(contactos[2]);
            cuentas[0].Contactos.Add(contactos[7]);
            cuentas[1].Contactos.Add(contactos[3]);
            cuentas[1].Contactos.Add(contactos[6]);
            cuentas[1].Contactos.Add(contactos[4]);
            cuentas[1].Contactos.Add(contactos[7]);
            cuentas[2].Contactos.Add(contactos[0]);
            cuentas[2].Contactos.Add(contactos[5]);
            cuentas[2].Contactos.Add(contactos[6]);
            cuentas[2].Contactos.Add(contactos[7]);
            cuentas.ForEach(c => context.Cuentas.Add(c));
            context.SaveChanges();

        }

    }
}